Formation-R-perfectionnement

Module Rappels et compléments sur R et RStudio

SSP/DEMESIS

31/01/2025

0.1 Avant-propos


Ce diaporama de formation a été rédigé dans le but d’être le support visuel des formations dispensées au MASA.

Ces formations s’adressent à des agents qui ont suivi la formation R initiation.

0.2 Avant-propos

Elles sont données en présentiel sur une durée de 3 jours, les modules de cette formation sont ajustables suivants le choix des agents.

Champ couvert par cette formation

Ce support couvre les rappels et complèments sur R et l’environnement du MASAF.

Pour information, Les modules de la formation R-perfectionnement sont:

  • 01 - Module Rappels

  • 02 - Module Fonctions

  • 03 - Module Cartes statiques et interactives

  • 04 - Module Création de graphiques avec ggplot2

  • 05 - Module Quarto

  • 06 - Module Parquet

  • 07 - Module Initiation à l’écriture d’applications Shiny

Ils sont orientés pour être utile aux agents du SSM Agriculture et se concentrent sur une utilisation de R via RStudio qui est mise à disposition des agents sur la plateforme interne Cerise basée sur RStudio Workbench.

1 Travailler avec R au ministère

1.1 Présentation

Logiciel de traitement de données et analyse statistique :

  • offre un environnement interactif de développement statistique, analytique et graphique ;

  • est doté d’un langage de programmation R ;

  • permet d’accéder à des données, de les manipuler et les analyser ;

  • S’interface avec les bases de données : Oracle, SYBASE, PostgreSQL, SQLITE…

Remplace SAS ou SPSS

Logiciel IDE : Integrated Development Environment

1.2 Pourquoi utiliser R

Avantages Inconvénients
  • logiciel gratuit et open source
  • Langage informatique nouveau à appréhender
  • développement actif : communauté d’utilisateurs de plus en plus importante
  • pas de génération de code par « clic-bouton »
  • nombreux packages (« outils ») scientifiques
  • compatibilité des versions
  • très bonnes capacités graphiques
  • calculs sur de grosses volumétries plus « gourmand » en CPUs et Mémoire
  • rapidité des traitements (R travaille en mémoire)
  • documentation et aide souvent disponibles qu’en anglais

1.3 Comment travailler avec R au MASA ?

Depuis la plate-forme CERISE :

  • ⇒ Adresse : https://rstudio.agriculture.rie.gouv.fr

  • ⇒ PISTACHE : Pistache > Traitements statistiques et Diffusion > R > Migration SPSS et SAS vers R > Accès au WIKI Cerise - R > Accéder à Cerise

En local sur son poste, sans intervention de Pastel

Existence d’une plate-forme CERISE de Préproduction :
https://rstudio-pprd.agriculture.rie.gouv.fr

1.4 Fenêtres dans RSTUDIO

1.5 Organisation sous CERISE

Cerise est organisé en plusieurs répertoires :

  • 00-Espace-Personnel => espaces personnels des agents, accessible par l’agent uniquement

  • 01-Espace-de-Partage => lieu de partage général entre les différents acteurs

  • 02-Espace-de-Production => plateforme de stockage des données brutes collectées, ainsi que des fichiers de données et programmes issus des traitements statistiques réalisés par l’équipe projet

  • 03-Espace-de-Diffusion => mise à disposition au sein du SSM des données issues des traitements statistiques réalisés en amont => Ces deux derniers espaces sont découpés par opérations statistiques

  • 04-Espace-Echanges => stockage des fichiers de données à transmettre aux autres applications du SI CASSIS (par exemple Agreste) ainsi qu’aux SI des partenaires extérieurs

2 Les différents objets R

2.1 Les vecteurs :

  • Objet élémentaire de R, une dimension

  • Ensemble de valeurs, appelées éléments, de même nature (nombres, chaînes de caractères, booléens…)

  • Création de vecteurs avec la fonction c() :

x ← c(TRUE, TRUE, FALSE)

x ← c(8.04, 18.01, 11.05, 14.05)

x ← c("Chaîne1", "804", "Chaîne3")

  • Fonctions utiles sur les vecteurs : length(), class(), names(), summary(), sort(), head(), tail(), unique()

2.2 Les matrices :

  • Une matrice est composée d’un ou de plusieurs éléments de mêmes types, organisés en deux dimensions.

  • Création de matrice avec la fonction matrix() :

# Création d'une matrice de numériques avec deux lignes et trois colonnes, remplissage par colonne.`
matrix(c(1,2,3,4,5,6), nrow = 2, ncol = 3) 

#      [,1] [,2] [,3]
# [1,]    1    3    5
# [2,]    2    4    6
  • Fonctions utiles : dim(), nrow(), ncol()

2.3 Les listes et data.frame :

  • Une data.frame est composée de vecteurs nommés de tailles égales mais pouvant être de types différents.

  • Une liste est composée d’objets différents.

  • Création avec les fonctions data.frame() et list() :

x ← list(c(TRUE, TRUE, FALSE),           # 1er élément : un vecteur de trois booléens
         c(8.04, 18.01, 11.05, 14.05),   # 2e élément : un vecteur de quatre numériques
         c("804"))                      # 3e élément : un vecteur d'une chaîne de caractères
         
x ← data.frame(nom=c("Yaël","Luan","Jade"),  # 1er élément : un vecteur « nom » de trois chaînes de caractères
              sexe = factor(c("H","F","F"), # 2e élément : un vecteur « sexe » de trois chaînes de caractères (en facteurs)
              age = c(5,1,3))               # 3e élément : un vecteur « age » de trois numériques 
                

3 Indexation d’objets avec R

3.1 Vecteur, indexation avec les crochets:

  • Indexation par position :

x <- c("Marion", "Benjamin", "Hélène", "Raymond"))

x[1] renvoie "Marion"

x[c(1, 2)] renvoie le vecteur c("Marion", "Benjamin")

  • Indexation par condition logique :

x <- c(8.04, 18.01, 11.05, 14.05)

x[x < 10] renvoie 8.04

x[x > 10] renvoie le vecteur c(18.01, 11.05, 14.05)

x[x >10 & x < 15] renvoie le vecteur c(11.05, 14.05)

3.2 Matrices et arrays,indexation avec les crochets:

Indexation par position :

x <- matrix(c("Marion", "Benjamin", "Hélène", "Raymond"), nrow = 2, ncol = 2)

x[1,] renvoie le vecteur c("Marion", "Hélène")

x[,2] renvoie le vecteur c("Hélène", "Raymond")

x[2,1] renvoie "Benjamin"


     [,1]       [,2]     
[1,] "Marion"   "Hélène" 
[2,] "Benjamin" "Raymond"

3.3 Listes :

  • Indexation par position :

x <- list(c(TRUE, TRUE, FALSE), c(8.04, 18.01, 11.05, 14.05), "804")

x[[2]] renvoie le deuxième vecteur de la liste x soit c(8.04, 18.01, 11.05, 14.05)

x[[2]][1] renvoie le premier élément du deuxième vecteur de la liste x soit 8.04

  • Indexation par nom si les vecteurs sont nommés avec l’opérateur $ :

x <- list(grp = c("Auguste", "Justine", "Sébastien", "Anne-Marie"), prt = c("Hélène", "Raymond"), enf = c("Marion", "Benjamin")

x$grp renvoie le vecteur nommé "grp" de la liste x soit c("Auguste", "Justine", "Sébastien", "Anne-Marie")

x$enf[1] renvoie le premier élément du vecteur nommé "enf" de la liste x soit "Marion"

3.4 Data.frame (1/2)

  • Indexation par position : comme pour les matrices

  • Indexation par nom : les vecteurs d’une data.frame sont nommés et accessibles directement dans les crochets ou via l’opérateur $

  • Les moyens d’indexation peuvent se combiner

→ Il y a donc une multitude de façons d’accéder à une valeur dans un data.frame !

3.5 Data.frame (2/2)

4 Traitement de données

4.1 Les tables de données

Les tables de données sont très souvent des objets de type data.frame. Fonctions utiles :

  • str() donne la structure de la table, names() le vecteur des noms de colonnes

  • head() et tail() affichent respectivement, par défaut, les 6 premières et les 6 dernières lignes de la table

  • dim() renvoie un vecteur composé du nombre de lignes et du nombre de colonnes de la table

4.2 Manipulation de données


  • La partie Manipulation de données va fournir les outils nécessaires aux traitements classiques à opérer sur une table de données.

  • À part pour la lecture et l’écriture de fichiers, les outils proposés relèvent des packages dplyr et tidyr : ils sont d’un usage plus simple que les outils R de base et couvrent beaucoup des fonctionnalités les plus courantes.

4.3 Outils DPLYR & TIDYR

  • Objectif de dplyr : rassembler dans un seul package les outils de manipulation de données les plus importants pour l’analyse des données

    ⇒ ensemble de fonctions correspondant à un ensemble d’opérations élémentaires

  • Deux principes pour les packages tidyr et dplyr :

    • Usage de fonctions « verbe » toutes construites sur le même principe : le premier paramètre est la table de données sur laquelle on travaille.

    • Usage de l’opérateur pipe (issu du package magrittr) Dans R-Studio, le raccourci clavier pour cet opérateur est : Ctrl + Shift + M

4.4 Filtre et sélection dans une table (1/2)

  • Avec R de base, on utilise les techniques d’indexation

ma_table[1,] : toutes les variables pour la première observation

ma_table[,4] : toutes les observations de la 4e variable

ma_table[,''Profession''] : toutes les observations de la variable Profession

ma_table[1,4] : première observation de la 4e variable

4.5 Filtre et sélection dans une table (2/2)

  • Avec le package dplyr :

    • Pour sélectionner des colonnes dans une table, on utilise la fonction select()

      maTable %\>% select(noms_des_colonnes)

    • Pour filtrer les lignes dans une table à l’aide de conditions logiques, on utilise la fonction filter()

      maTable %\>% filter(conditions)

ma_table %>% filter(Profession == “Militaire”)

ma_table %>% filter(Age < 30) %>% select(Nom_prenom)

4.6 Création ou modification de variables dans une table

  • Avec R de base, on utilise l’opérateur d’affectation :

    • table$new_var <- variable → formule générique

    • table$new_var <- valeur_constante → création d’une constante

    • table$new_var <- fonction(table$var1) → création à partir d’une formule

    • table$new_var <- table$var1 + table$var2 → création à partir d’opérations

    • table$new_var <- vecteur1 OU table1$new_var <- table2$var1 → création à partir de variables externes

    • table$new_var <- ifelse(table$varref < x, val1, val2)
      OU table$new_var <- case_when(table$varref < x ~ val1, TRUE ~ val2) → traitement conditionnel

4.7 Création ou modification de variables dans une table

  • Avec le package dplyr, on utilise la fonction mutate() qui permet de créer plusieurs variables à la fois et permet de s’affranchir de l’indexation :

    • table ← table %>% mutate(new_var1 = var1, newvar2 = var2) → formule générique

    • table ← table %>% mutate(new_var1 = constante) → création d’une constante

    • table ← table %>% mutate(new_var2 = fonction(var1)) → création à partir d’une formule

    • table ← table %>% mutate(new_var3 = var1 + var2) → création à partir d’opérations arithmétiques

    • table ← table %>% mutate(new_var4 = vecteur1) → création à partir de variables externes

    Pour modifier une variable on affecte la nouvelle valeur à une variable existante

4.8 Fonctions utiles au traitement des chaînes de caractères

4.9 Tri dans une table

  • Pour trier une table selon une ou plusieurs variables, on utilise la fonction arrange()

maTable %>% arrange(variables_de_tri)


→ possibilité de trier selon plusieurs colonnes : les variables de tri doivent être séparées par une virgule.

→ on encadre les variables qu’il faut trier de façon décroissante par la fonction desc().

4.10 Fusion de tables


  • Pour fusionner deux tables en utilisant une ou plusieurs variables de jointure, on utilise les fonctions XXX_join()

4.11 Joindre des tables avec une variable de jointure

4.12 Fusion de tables

  • Il est possible de réaliser une jointure à l’aide de plusieurs variables identifiantes : l’argument by s’écrit alors c(‘’id1’‘,’‘id2’’, …)

  • Lorsque les variables de jointure ont des noms différents dans les deux tables, l’argument by prend comme paramètre un vecteur du type c(‘’id1_tab1’’ = ‘’id1_tab2’‘,’‘id2_tab1’’ = ‘’id2_tab2’’,…)

  • Si rien n’est précisé, la fusion se fait sur l’ensemble des variables portant le même nom dans les deux tables

4.13 Agrégation dans une table

  • Pour résumer les données d’une table en une seule statistique, on utilise la fonction summarise()

maTable %>% summarise(fonctions_stat(variable))

  • Pour agréger les données d’une table par groupe d’une ou plusieurs variables catégorielles on utilise la fonction group_by() avant la fonction summarise()

maTable %>% group_by(var_groupe)%>% summarise(fonctions_stat(variable))%>% ungroup()

→ possibilité de calculer plusieurs statistiques en séparant les instructions par une virgule

→ on peut utiliser les fonctions statistiques de base telles que max, min, mean, sd, n…

→ ungroup permet de ne plus tenir compte du regroupement par la suite (avec l’argument drop = FALSE)

4.14 Transposition ou réorganisation de table


Pour réorganiser une table, c’est à dire passer des lignes en colonnes ou inversement, on utilise les fonctions pivot_wider() et pivot_longer() du package tidyr.

4.15 Pivot_wider()



maTable %>% pivot_wider(col_de_noms, col_de_valeurs)

  • col_de_noms = nom de la variable dont les modalités deviendront les intitulés de colonne

  • col_de_valeurs = nom de la variable à utiliser pour remplir les colonnes

4.16 Pivot_longer()



maTable %>% pivot_longer( variables_apivoter , names_to = "indicateur", values_to = "valeur")

  • variables_a_pivoter = nom de l’ensemble des variables à représenter

  • names_to = nom de la première colonne à créer

  • values_to = nom de la deuxième colonne à créer

4.17 Exemples sur les pivots

# Passage de tab1 à tab2 avec la fonction pivot_wider()
tab2 ← pivot_wider(tab1, names_from = mesure, values_from = temperature)
# Passage de tab2 à tab1 avec la fonction pivot_longer() 
tab1 ← pivot_longer(tab2, c(min, max, moy), names_to = "mesure", values_to = "temperature")

4.18 Lecture/ Ecriture de fichiers

Type Lecture Ecriture
Texte reader::read_delim() reader::write_delim()
RDS read_rds() readr::write_rds()
XLS les fonctions du package {readxl} les fonctions du package {openxlsx}
SAS ou SPSS haven::read_sas() et haven::read_spss() Exporter au format texte puis lecture dans SAS ou SPSS (sans objet désormais)
ODS readODS::read_ods() readODS::write_ods()
Parquet Les packages arrow et duckdb Le package arrow]

4.19 Base de données avec R

  • R offre la possibilité d’effectuer des requêtes SQL sur des bases de données externes.

  • Des informations pour la connexion sont nécessaires : library(RPostgres)

cnx <- dbConnect(Postgres(), dbname = "sirene", port = 5432, host = "00.11.22.33", user = "nom_user", password = "mdp")

  • Il suffit ensuite d’écrire les requêtes normalement à l’aide de la fonction dbGetQuery :

dbGetQuery(cnx, "SELECT * FROM TABLE")